nvme_ioctl_submit_io issue

Zakaria Abushima (zabushima) zabushima at micron.com
Tue Dec 16 07:03:28 PST 2014


I actually updated it to the following char data[4096], which is 4096 byte, each block is 512 and with 8 blocks we are allocating exactly as the required size ?

-----Original Message-----
From: Keith Busch [mailto:keith.busch at intel.com] 
Sent: 16 December 2014 15:01
To: Zakaria Abushima (zabushima)
Cc: linux-nvme at lists.infradead.org
Subject: Re: nvme_ioctl_submit_io issue

Your command is broken, but I can't say why that breaks your controller. The data buffer is 8 bytes on the stack, but you've set nblocks to 7. Assuming a block is 512 bytes, this command is expecting 4k worth of data and that's what the driver is going to map.

On Tue, 16 Dec 2014, Zakaria Abushima (zabushima) wrote:
> Hi Guys,
>
> I try to write to the name space using following application,
>
>               static const char *perrstr;
>
>               char data[] = "Zakaria";
>               struct nvme_passthru_cmd write, compare;
>               struct nvme_user_io io;
>
>               int fd, err;
>
>               perrstr = argv[1];
>
>               fd = open(argv[1], O_RDWR);
>               if (fd < 0)
>                              goto perror;
>
>               io.opcode = nvme_cmd_write;
>               io.flags = 0;
>               io.control = 0;
>               io.metadata = (unsigned long)0;
>               io.addr = (unsigned long)data;
>               io.slba = 0;
>               io.nblocks = 7;
>               io.dsmgmt = 0;
>               io.reftag = 0;
>               io.apptag = 0;
>               io.appmask = 0;
>
>               err = ioctl(fd, NVME_IOCTL_SUBMIT_IO, &io);
>
>               if (err < 0) {
>                              goto perror;
>               }
>               if (err){
>                              fprintf(stderr, "nvme write status:%x\n", err);
>               }
>               fprintf(stderr,"status : %x\n",err);
>
>               close(fd);
>
>               return 0;
>
> perror:
>               perror(perrstr);
>               return 1;
>
> For the first time I had  " device busy error ",
>
> Then when I ran for second time the nvme0 and namespaces has 
> disappeared from /dev/ directory
>
> Any idea of what happens



More information about the Linux-nvme mailing list