On Wed, 17 July 2013 23:34:05 +0800, Vaughan Cao wrote:
>
> -static Sg_fd *sg_add_sfp(Sg_device * sdp, int dev);
> +static Sg_fd *sg_add_sfp(Sg_device * sdp, int dev, int * reason);

You can use ERR_PTR and friends instead of adding another parameter.

>  static void sg_remove_sfp(struct kref *);
>  static Sg_request *sg_get_rq_mark(Sg_fd * sfp, int pack_id);
>  static Sg_request *sg_add_request(Sg_fd * sfp);
> @@ -295,21 +295,14 @@ sg_open(struct inode *inode, struct file *filp)
>       if (flags & O_EXCL)
>               sdp->exclude = 1;       /* used by release lock */
>  
> -     if (sdp->detached) {
> -             retval = -ENODEV;
> -             goto sem_out;
> -     }
>       if (sfds_list_empty(sdp)) {     /* no existing opens on this device */
>               sdp->sgdebug = 0;
>               q = sdp->device->request_queue;
>               sdp->sg_tablesize = queue_max_segments(q);
>       }
> -     if ((sfp = sg_add_sfp(sdp, dev)))
> -             filp->private_data = sfp;
> -     else {
> -             retval = -ENOMEM;
> +     if (!(sfp = sg_add_sfp(sdp, dev, &retval)))
>               goto sem_out;
> -     }

        sfp = sg_add_sfp(sdp, dev);
        if (IS_ERR(sfp)) {
                retval = PTR_ERR(sfp);
                goto sem_out;
        }

> +     filp->private_data = sfp;
>       retval = 0;
>  
>       if (retval) {
> @@ -2047,15 +2040,18 @@ sg_remove_request(Sg_fd * sfp, Sg_request * srp)
>  }
>  
>  static Sg_fd *
> -sg_add_sfp(Sg_device * sdp, int dev)
> +sg_add_sfp(Sg_device * sdp, int dev, int * reason)
>  {
>       Sg_fd *sfp;
>       unsigned long iflags;
>       int bufflen;
>  
>       sfp = kzalloc(sizeof(*sfp), GFP_ATOMIC | __GFP_NOWARN);
> -     if (!sfp)
> +     if (!sfp) {
> +             if (reason)
> +                     *reason = -ENOMEM;
>               return NULL;
> +     }

        if (!sfp)
                return ERR_PTR(-ENOMEM);

Jörn

--
Luck is when opportunity meets good preparation.
-- Chinese proverb
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to